<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 与栈不同，队列遵循的是先进先出的原则
        class Queue {
            constructor() {
                this.items = [];
            }
            // 从后面添加元素
            enqueue(ele) {
                this.items.push(ele);
            }
            // 从前面取出第一个元素
            dequeue() {
                return this.items.shift();
            }
            // 获取第一个元素的值
            front() {
                return this.items[0]
            }
            // 判断是否为空
            isEmpty() {
                return this.items.length == 0;
            }
            // 判断元素个数
            size() {
                return this.items.length;
            }
            // 清空
            clear() {
                return this.items = [];
            }
        };

        let queue = new Queue();
        console.log(queue);

        // 优先队列
        class QueueElement {
            constructor(element, priority) {
                this.element = element;
                this.priority = priority;
            }
        }

        class PriorityQueue {
            constructor() {
                this.items = [];
            }
            // 按队列添加元素
            enqueue(ele, pri) {
                let queueElement = new QueueElement(ele, pri);
                if (this.isEmpty()) {
                    this.items.push(queueElement);
                } else {
                    let add = false;
                    for (let i = 0; i < this.items.length; i++) {
                        if (queueElement.priority < this.items[i].priority) {
                            this.items.splice(i, 0, queueElement);
                            add = true;
                            break;
                        }
                    }
                    if (!add) {
                        this.items.push(queueElement);
                    }
                }
            }
            // 从前面取出第一个元素
            dequeue() {
                return this.items.shift();
            }
            // 获取第一个元素的值
            front() {
                return this.items[0]
            }
            // 判断是否为空
            isEmpty() {
                return this.items.length == 0;
            }
            // 判断元素个数
            size() {
                return this.items.length;
            }
            // 清空
            clear() {
                return this.items = [];
            }
        };

        let queue2 = new PriorityQueue();
        queue2.enqueue('aaa', 1);
        queue2.enqueue('ccc', 3);
        queue2.enqueue('bbb', 2);

        console.log(queue2);
    </script>
</body>

</html>